package com.yuncheng.oaApi.controller;

import java.util.*;
import java.util.stream.Collectors;
import javax.annotation.Resource;

import org.apache.commons.collections.CollectionUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yuncheng.oaApi.constant.OaCommonFlowConstant;
import com.yuncheng.oaApi.constant.OaJcyFybxdConstant;
import com.yuncheng.oaApi.constant.OaFlowConstant;
import com.yuncheng.exception.BusinessException;
import com.yuncheng.oaApi.service.IOaYcSysUserService;
import com.yuncheng.spcyApi.utils.GetCurrentUserUtils;
import com.yuncheng.vo.HttpResult;
import com.yuncheng.annotation.AutoLog;
import com.yuncheng.utils.I18nUtil;
import com.yuncheng.common.base.controller.BaseController;
import com.yuncheng.oaApi.entity.NkBxJtxcd;
import com.yuncheng.oaApi.service.INkBxJtxcdService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.annotation.Lazy;

/**
 * @Description: 报销-交通行程单
 * @Author: lhb
 * @Date: 2024-05-23
 * @Version: V1.0
 */
@Api(tags = "报销-交通行程单接口")
@RestController
@RequestMapping("/api/spzx-oa/nkBxJtxcd")
public class NkBxJtxcdController extends BaseController<NkBxJtxcd, INkBxJtxcdService> {

    private static final Logger log = LoggerFactory.getLogger(NkBxJtxcdController.class);

    @Resource
    private INkBxJtxcdService nkBxJtxcdService;

    @Resource
    @Lazy
    private IOaYcSysUserService ycSysUserService;

    /**
     * 分页列表查询
     *
     * @param nkBxJtxcd
     * @param pageNo
     * @param pageSize
     * @param
     * @return
     */
    @AutoLog(value = "报销-交通行程单-分页列表查询")
    @ApiOperation(value = "报销-交通行程单-分页列表查询")
    @GetMapping(value = "/list")
    public HttpResult<?> queryPageList(NkBxJtxcd nkBxJtxcd, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "50") Integer pageSize) {
        if (StringUtils.isBlank(nkBxJtxcd.getFbxdid())){
            throw new BusinessException(I18nUtil.message("报销单id为空"));
        }
        GetCurrentUserUtils.getCurrentUser();

        LambdaQueryWrapper<NkBxJtxcd> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(NkBxJtxcd ::getFbxdid, nkBxJtxcd.getFbxdid());
        queryWrapper.orderByAsc(NkBxJtxcd ::getCreateTime);
//        queryWrapper.last("order by instr ('组长,组员,预备检查员,观察员', fjcsf)");

        Page<NkBxJtxcd> page = new Page<>(pageNo, pageSize);
        IPage<NkBxJtxcd> pageList = nkBxJtxcdService.page(page, queryWrapper);


        String[] roleOrder = {"组长", "组员", "预备检查员", "观察员"};

        // 二次排序，根据 fjcsf 字段的值
        List<NkBxJtxcd> sortedList = pageList.getRecords().stream()
                .sorted(Comparator.comparing(n -> Arrays.asList(roleOrder).indexOf(n.getFjcsf())))
                .collect(Collectors.toList());

        return HttpResult.ok(sortedList);
    }





    @AutoLog(value = "报销-交通行程单-在职分页列表查询")
    @ApiOperation(value = "报销-交通行程单-在职分页列表查询")
    @GetMapping(value = "/zzlist")
    public HttpResult<?> zzlist(NkBxJtxcd nkBxJtxcd, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "25") Integer pageSize) {
        if (StringUtils.isBlank(nkBxJtxcd.getFbxdid())){
            throw new BusinessException(I18nUtil.message("报销单id为空"));
        }
        GetCurrentUserUtils.getCurrentUser();

        LambdaQueryWrapper<NkBxJtxcd> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(NkBxJtxcd ::getFbxdid, nkBxJtxcd.getFbxdid());
        queryWrapper.orderByAsc(NkBxJtxcd ::getCreateTime);

        Page<NkBxJtxcd> page = new Page<>(pageNo, pageSize);
        IPage<NkBxJtxcd> pageList = nkBxJtxcdService.page(page, queryWrapper);




        return HttpResult.ok(pageList);
    }



    /**
     * 添加
     *
     * @param nkBxJtxcd
     * @return
     */
    @AutoLog(value = "报销-交通行程单-添加")
    @ApiOperation(value = "报销-交通行程单-添加")
    //@RequiresPermissions("nk:NkBxJtxcd:add")
    @PostMapping(value = "/add")
    public HttpResult<?> add(@RequestBody NkBxJtxcd nkBxJtxcd) {
        HttpResult<String> result = new HttpResult(true);

        if (StringUtils.isBlank(nkBxJtxcd.getFbxdid())){
            throw new BusinessException("报销单id为空");
        }

        if (StringUtils.isBlank(nkBxJtxcd.getFbxdgrid())){
            throw new BusinessException("报销单个人id为空");
        }


        String fuserid = nkBxJtxcd.getFuserid();

        nkBxJtxcd.setRealname(ycSysUserService.getById(fuserid).getRealname());

        List<NkBxJtxcd> nkBxJtxcds = nkBxJtxcdService.list(new LambdaQueryWrapper<NkBxJtxcd>()
                .eq(NkBxJtxcd::getFuserid, nkBxJtxcd.getFuserid()));
        if (CollectionUtils.isNotEmpty(nkBxJtxcds)){
            NkBxJtxcd nkBxJtxcd1 = nkBxJtxcds.get(0);

            nkBxJtxcd.setSex(nkBxJtxcd1.getSex());
            nkBxJtxcd.setFsfzh(nkBxJtxcd1.getFsfzh());
            nkBxJtxcd.setPhone(nkBxJtxcd1.getPhone());
            nkBxJtxcd.setFgzdw(nkBxJtxcd1.getFgzdw());
            nkBxJtxcd.setFjcsf(nkBxJtxcd1.getFjcsf());
            nkBxJtxcd.setFcsjjtfs(OaJcyFybxdConstant.CSJJTFS_DEFAULT_GT);
            nkBxJtxcd.setFwjtfsfdf(OaCommonFlowConstant.SFFQLC_NO);
//            nkBxJtxcd.setFfjtfsfdf(CommonFlowConstant.SFFQLC_NO);

            nkBxJtxcd.setFwjtfsbje("0");
            nkBxJtxcd.setFwjtfybje("0");
//            nkBxJtxcd.setFfjtfsbje("0");
//            nkBxJtxcd.setFfjtfybje("0");
        }


        nkBxJtxcdService.save(nkBxJtxcd);
        result.setResult(nkBxJtxcd.getId());
        result.setMessage(I18nUtil.message("save.success"));
        return result;
    }

    /**
     * 编辑
     *
     * @param nkBxJtxcd
     * @return
     */
    @AutoLog(value = "报销-交通行程单-编辑")
    @ApiOperation(value = "报销-交通行程单-编辑")
    @PutMapping(value = "/edit")
    public HttpResult<?> edit(@RequestBody NkBxJtxcd nkBxJtxcd) {

        if(StringUtils.isNotBlank(nkBxJtxcd.getFwjtfsfdf()) && nkBxJtxcd.getFwjtfsfdf().equals(OaFlowConstant.NO)){


            //当前更新的行程数据
            NkBxJtxcd nkBxJtxcd1 = nkBxJtxcdService.getById(nkBxJtxcd.getId());
            nkBxJtxcd1.setFwjtfdfrxm("");
            nkBxJtxcd1.setFwjtfdfrid("");

            //设置为空的时候，将应报更新为实报
            nkBxJtxcd1.setFwjtfsbje(nkBxJtxcd1.getFwjtfybje());



            nkBxJtxcdService.updateById(nkBxJtxcd1);



        }

        if (StringUtils.isNotBlank(nkBxJtxcd.getFwjtfybje())){
            nkBxJtxcd.setFwjtfsbje(nkBxJtxcd.getFwjtfybje());
        }

        if (StringUtils.isNotBlank(nkBxJtxcd.getFwjtfsbje())){
            nkBxJtxcd.setFwjtfybje(nkBxJtxcd.getFwjtfsbje());
        }


        if (StringUtils.isNotBlank(nkBxJtxcd.getFwjtfdfrid())){
            nkBxJtxcd.setFwjtfdfrxm(ycSysUserService.getById(nkBxJtxcd.getFwjtfdfrid()).getRealname());
        }

        if (StringUtils.isBlank(nkBxJtxcd.getFwjtfybje())){
            nkBxJtxcd.setFwjtfsbje("");
            nkBxJtxcd.setFwjtfybje("");
        }
        if (StringUtils.isBlank(nkBxJtxcd.getFwjtfsbje())){
            nkBxJtxcd.setFwjtfsbje("");
            nkBxJtxcd.setFwjtfybje("");
        }



        nkBxJtxcdService.updateById(nkBxJtxcd);
        return HttpResult.ok("更新成功");
    }

    /**
     * 通过id删除
     *
     * @param id
     * @return
     */
    @AutoLog(value = "报销-交通行程单-通过id删除")
    @ApiOperation(value = "报销-交通行程单-通过id删除")
    //@RequiresPermissions("nk:NkBxJtxcd:delete")
    @DeleteMapping(value = "/delete")
    public HttpResult<?> delete(@RequestParam("id") String id,String fuserid) {

        //根据用户id判断
        List<NkBxJtxcd> nkBxJtxcds = nkBxJtxcdService.list(new LambdaQueryWrapper<NkBxJtxcd>()
                .eq(NkBxJtxcd::getFuserid, fuserid));
        if (nkBxJtxcds.size() == 1){
            throw new BusinessException("删除失败,不能删除最后一条数据");
        }


        nkBxJtxcdService.removeById(id);
        return HttpResult.ok(I18nUtil.message("delete.success"));
    }

    /**
     * 通过id批量删除
     *
     * @param ids
     * @return
     */
    @AutoLog(value = "报销-交通行程单-批量删除")
    @ApiOperation(value = "报销-交通行程单-批量删除")
    //@RequiresPermissions("nk:NkBxJtxcd:delete")
    @DeleteMapping(value = "/deleteBatch")
    public HttpResult<?> deleteBatch(@RequestParam("ids") String ids) {
        nkBxJtxcdService.removeByIds(Arrays.asList(ids.split(",")));
        return HttpResult.ok(I18nUtil.message("delete.success"));
    }

    /**
     * 通过id查询
     *
     * @param id
     * @return
     */
    @AutoLog(value = "报销-交通行程单-通过id查询")
    @ApiOperation(value = "报销-交通行程单-通过id查询")
    @GetMapping(value = "/queryById")
    public HttpResult<?> queryById(@RequestParam("id") String id) {
        NkBxJtxcd nkBxJtxcd = nkBxJtxcdService.getById(id);
        return HttpResult.ok(nkBxJtxcd);
    }


    /**
     * 交通费行程单 批量设置出行方式
     */
    @AutoLog(value = "批量设置出行方式")
    @ApiOperation(value = "批量设置出行方式")
    @GetMapping(value = "/batchSetBxdCxfs")
    public HttpResult<?> batchSetBxdCxfsByBxdId(String fbxdid, String fcsjjtfs) {
        nkBxJtxcdService.batchSetBxdCxfsByBxdId(fbxdid,fcsjjtfs);
        return HttpResult.ok();
    }



}
